/*
 * Copyright (C) 2024-2025 OpenAni and contributors.
 *
 * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
 * Use of this source code is governed by the GNU AGPLv3 license, which can be found at the following link.
 *
 * https://github.com/open-ani/ani/blob/main/LICENSE
 */

@file:Suppress("unused")

package me.him188.ani.utils.platform.collections

@ExposedCopyVisibility
data class Tuple1<T1> internal constructor(
    val e1: T1,
) {
    override fun toString(): String = "($e1)"
}

fun <T1> tupleOf(e1: T1) = Tuple1(e1)

///////////////////////////////////////////////////////////////////////////
// Below are generated by AI.
// Do not modify them manually. Modify Tuple1 and let AI repeat it until T23.
///////////////////////////////////////////////////////////////////////////

@ExposedCopyVisibility
data class Tuple2<T1, T2> internal constructor(
    val e1: T1,
    val e2: T2,
) {
    override fun toString(): String = "($e1, $e2)"
}

fun <T1, T2> tupleOf(e1: T1, e2: T2) = Tuple2(e1, e2)

@ExposedCopyVisibility
data class Tuple3<T1, T2, T3> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
) {
    override fun toString(): String = "($e1, $e2, $e3)"
}

fun <T1, T2, T3> tupleOf(e1: T1, e2: T2, e3: T3) = Tuple3(e1, e2, e3)

@ExposedCopyVisibility
data class Tuple4<T1, T2, T3, T4> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
) {
    override fun toString(): String = "($e1, $e2, $e3, $e4)"
}

fun <T1, T2, T3, T4> tupleOf(e1: T1, e2: T2, e3: T3, e4: T4) =
    Tuple4(e1, e2, e3, e4)

@ExposedCopyVisibility
data class Tuple5<T1, T2, T3, T4, T5> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
) {
    override fun toString(): String = "($e1, $e2, $e3, $e4, $e5)"
}

fun <T1, T2, T3, T4, T5> tupleOf(e1: T1, e2: T2, e3: T3, e4: T4, e5: T5) =
    Tuple5(e1, e2, e3, e4, e5)

@ExposedCopyVisibility
data class Tuple6<T1, T2, T3, T4, T5, T6> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
) {
    override fun toString(): String = "($e1, $e2, $e3, $e4, $e5, $e6)"
}

fun <T1, T2, T3, T4, T5, T6> tupleOf(e1: T1, e2: T2, e3: T3, e4: T4, e5: T5, e6: T6) =
    Tuple6(e1, e2, e3, e4, e5, e6)

@ExposedCopyVisibility
data class Tuple7<T1, T2, T3, T4, T5, T6, T7> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
) {
    override fun toString(): String = "($e1, $e2, $e3, $e4, $e5, $e6, $e7)"
}

fun <T1, T2, T3, T4, T5, T6, T7> tupleOf(e1: T1, e2: T2, e3: T3, e4: T4, e5: T5, e6: T6, e7: T7) =
    Tuple7(e1, e2, e3, e4, e5, e6, e7)

@ExposedCopyVisibility
data class Tuple8<T1, T2, T3, T4, T5, T6, T7, T8> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
) {
    override fun toString(): String = "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8
) = Tuple8(e1, e2, e3, e4, e5, e6, e7, e8)

@ExposedCopyVisibility
data class Tuple9<T1, T2, T3, T4, T5, T6, T7, T8, T9> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
) {
    override fun toString(): String = "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9
) = Tuple9(e1, e2, e3, e4, e5, e6, e7, e8, e9)

@ExposedCopyVisibility
data class Tuple10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
) {
    override fun toString(): String = "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10
) = Tuple10(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10)

@ExposedCopyVisibility
data class Tuple11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
) {
    override fun toString(): String = "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11
) = Tuple11(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11)

@ExposedCopyVisibility
data class Tuple12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
) {
    override fun toString(): String = "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12
) = Tuple12(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12)

@ExposedCopyVisibility
data class Tuple13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
    val e13: T13,
) {
    override fun toString(): String = "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12, $e13)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12,
    e13: T13
) = Tuple13(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13)

@ExposedCopyVisibility
data class Tuple14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
    val e13: T13,
    val e14: T14,
) {
    override fun toString(): String =
        "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12, $e13, $e14)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12,
    e13: T13,
    e14: T14
) = Tuple14(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14)

@ExposedCopyVisibility
data class Tuple15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
    val e13: T13,
    val e14: T14,
    val e15: T15,
) {
    override fun toString(): String =
        "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12, $e13, $e14, $e15)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12,
    e13: T13,
    e14: T14,
    e15: T15
) = Tuple15(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15)

@ExposedCopyVisibility
data class Tuple16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
    val e13: T13,
    val e14: T14,
    val e15: T15,
    val e16: T16,
) {
    override fun toString(): String =
        "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12, $e13, $e14, $e15, $e16)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12,
    e13: T13,
    e14: T14,
    e15: T15,
    e16: T16
) = Tuple16(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16)

@ExposedCopyVisibility
data class Tuple17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
    val e13: T13,
    val e14: T14,
    val e15: T15,
    val e16: T16,
    val e17: T17,
) {
    override fun toString(): String =
        "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12, $e13, $e14, $e15, $e16, $e17)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12,
    e13: T13,
    e14: T14,
    e15: T15,
    e16: T16,
    e17: T17
) = Tuple17(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17)

@ExposedCopyVisibility
data class Tuple18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
    val e13: T13,
    val e14: T14,
    val e15: T15,
    val e16: T16,
    val e17: T17,
    val e18: T18,
) {
    override fun toString(): String =
        "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12, $e13, $e14, $e15, $e16, $e17, $e18)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12,
    e13: T13,
    e14: T14,
    e15: T15,
    e16: T16,
    e17: T17,
    e18: T18
) = Tuple18(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18)

@ExposedCopyVisibility
data class Tuple19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
    val e13: T13,
    val e14: T14,
    val e15: T15,
    val e16: T16,
    val e17: T17,
    val e18: T18,
    val e19: T19,
) {
    override fun toString(): String =
        "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12, $e13, $e14, $e15, $e16, $e17, $e18, $e19)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12,
    e13: T13,
    e14: T14,
    e15: T15,
    e16: T16,
    e17: T17,
    e18: T18,
    e19: T19
) = Tuple19(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19)

@ExposedCopyVisibility
data class Tuple20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
    val e13: T13,
    val e14: T14,
    val e15: T15,
    val e16: T16,
    val e17: T17,
    val e18: T18,
    val e19: T19,
    val e20: T20,
) {
    override fun toString(): String =
        "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12, $e13, $e14, $e15, $e16, $e17, $e18, $e19, $e20)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12,
    e13: T13,
    e14: T14,
    e15: T15,
    e16: T16,
    e17: T17,
    e18: T18,
    e19: T19,
    e20: T20
) = Tuple20(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20)

@ExposedCopyVisibility
data class Tuple21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
    val e13: T13,
    val e14: T14,
    val e15: T15,
    val e16: T16,
    val e17: T17,
    val e18: T18,
    val e19: T19,
    val e20: T20,
    val e21: T21,
) {
    override fun toString(): String =
        "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12, $e13, $e14, $e15, $e16, $e17, $e18, $e19, $e20, $e21)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12,
    e13: T13,
    e14: T14,
    e15: T15,
    e16: T16,
    e17: T17,
    e18: T18,
    e19: T19,
    e20: T20,
    e21: T21
) = Tuple21(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21)

@ExposedCopyVisibility
data class Tuple22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
    val e13: T13,
    val e14: T14,
    val e15: T15,
    val e16: T16,
    val e17: T17,
    val e18: T18,
    val e19: T19,
    val e20: T20,
    val e21: T21,
    val e22: T22,
) {
    override fun toString(): String =
        "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12, $e13, $e14, $e15, $e16, $e17, $e18, $e19, $e20, $e21, $e22)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12,
    e13: T13,
    e14: T14,
    e15: T15,
    e16: T16,
    e17: T17,
    e18: T18,
    e19: T19,
    e20: T20,
    e21: T21,
    e22: T22
) = Tuple22(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22)

@ExposedCopyVisibility
data class Tuple23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> internal constructor(
    val e1: T1,
    val e2: T2,
    val e3: T3,
    val e4: T4,
    val e5: T5,
    val e6: T6,
    val e7: T7,
    val e8: T8,
    val e9: T9,
    val e10: T10,
    val e11: T11,
    val e12: T12,
    val e13: T13,
    val e14: T14,
    val e15: T15,
    val e16: T16,
    val e17: T17,
    val e18: T18,
    val e19: T19,
    val e20: T20,
    val e21: T21,
    val e22: T22,
    val e23: T23,
) {
    override fun toString(): String =
        "($e1, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $e10, $e11, $e12, $e13, $e14, $e15, $e16, $e17, $e18, $e19, $e20, $e21, $e22, $e23)"
}

fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> tupleOf(
    e1: T1,
    e2: T2,
    e3: T3,
    e4: T4,
    e5: T5,
    e6: T6,
    e7: T7,
    e8: T8,
    e9: T9,
    e10: T10,
    e11: T11,
    e12: T12,
    e13: T13,
    e14: T14,
    e15: T15,
    e16: T16,
    e17: T17,
    e18: T18,
    e19: T19,
    e20: T20,
    e21: T21,
    e22: T22,
    e23: T23
) = Tuple23(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23)
